package compiler;
/**
 * Een <code>Token</code> is een stuk tekst die de scanner heeft herkend.
 */
class Token {

  /**
   * Het soort van dit token.
   * @see TokenKinds
   */
  private int kind;

  /**
   * De herkende tekst van dit token.
   */
  private String text;

  /**
   * Het regelnummer waar het token eindigt.
   */
  private int line;

  /**
   * Het kolomnummer waar het token eindigt.
   */
  private int column;

  /**
   * Construeer nieuw (tekstloos) token.
   * @param kind soort token
   * @param line regelnummer
   * @param column kolomnummer
   */
  public Token(int kind,int line,int column) {
    this(kind,line,column,"");
  }

  /**
   * Construeer nieuw token.
   * @param kind soort token
   * @param line regelnummer
   * @param column kolomnummer
   * @param tekst token tekst
   */
  public Token(int kind,int line,int column,String text) {
    assert line>0 && column>0;
    assert text!=null;

    this.kind=kind;
    this.text=text;
    this.line=line;
    this.column=column;
  }

  /**
   * Verkrijg het soort van dit token.
   * @return een identificatie van een token soort
   * @see TokenKinds
   */
  public int getKind() {
    return kind;
  }

  /**
   * Verkrijg de tekst behorende bij dit token.
   * @return een string
   */
  public String getText() {
    return text;
  }

  /**
   * Verkrijg het kolomnummer waar dit token eindigt.
   * @return een integer
   */
  public int getColumn() {
    return column;
  }

  /**
   * Verkrijg het regelnummer waar dit token eindigt.
   * @return een integer
   */
  public int getLine() {
    return line;
  }

  /**
   * Verkrijg een string representatie van dit token.
   * @return een string met daarin soort, regel-, kolomnummer en tekst
   */
  public String toString() {
    return new StringBuffer()
      .append("Token(")
      .append(line).append('/').append(column)
      .append(',')
      .append(kind)
      .append(',')
      .append('\'').append(text).append('\'')
      .append(')')
      .toString();
  }
}
